-- Copyright (c) 2015,2016 Lucky Byte, Inc.
--
-- Summary : 消费交易成功后处理
--
-- Author  : 吴小虎 <xiaohu@lucky-byte.com>
-- Since   : 2016.7.10
--
-- History
--  * 2015.7.10 : 创建此文件
--  * 2015.7.29 : 完善注释
--

-- 消费交易成功后处理
--  1. 如果当前消费终端配置了消费代付，则创建消费代付订单;
--
local function _postproc_t20()
    logger.debug('开始执行消费交易后处理...')

    -- 检查当前的交易终端是否配置了消费代付
    local _t = jdbc.select([[
        select * from pay_p1 where
            usable = true and t20_termid = ? and tz0_termid is not null
    ]], reqt.term.get('uuid'))

    -- 如果没有查询结果，则说明：
    --  1. 此终端上的消费无需代付；
    --  2. 此终端上的消费需要代付，但是忘记了增加配置；
    if _t.count == 0 then
        logger.debug('终端[%s]没有出现在消费代付配置中，无需创建消费代付订单.',
            reqt.term.get('termid'))
        return '00'
    end
    -- 多条查询结果不太可能，因为数据表有唯一约束
    if _t.count > 1 then
        logger.error('消费代付配置错误，终端[%s]存在于多条配置记录中.',
            reqt.term.get('termid'))
        return '01'
    end
    local _p1_record = _t.get_record(0)

    logger.debug('终端[%s]配置了消费代付[%s]，开始创建消费代付订单...',
        reqt.term.get('termid'), _p1_record.get('uuid'))

    -- 登记手续费，当前只有消费手续费
    -- 消费手续费在转发交易后已计算，这里不再重复计算
    if not reqt.fee or reqt.fee < 0.0 then
        notify.error(
            '未获取到当前交易的消费手续费，不能登记消费代付订单，商户号[%s]，终端号[%s].',
            req.merch.get('merno'), reqt.term.get('termid'))
        return '01'
    end
    local _p1_fee = reqt.fee

    -- 在消费代付订单中插入一条新记录，状态为未受理，后续系统接收到消费代付交易时，
    -- 将通过查询此订单来进行代付，订单只能受理一次
    local _order_uuid = uuid()
    local _ret = jdbc.update([[
        insert into pay_p1_order (
            uuid, p1_uuid, t20_uuid, p1_fee, status, notes
        ) values (
            ?, ?, ?, ?, 1, '消费成功，尚未代付'
        )
    ]], _order_uuid, _p1_record.get('uuid'), reqt.uuid, _p1_fee)

    -- 根据数据库操作结果输出一条日志信息，不是非常重要
    if _ret < 0 then
        logger.error('交易[%s]创建消费代付订单失败.', reqt.uuid)
        return '01'
    end
    logger.info('消费代付订单[%s]创建成功.', _order_uuid)
    return '00'
end


return _postproc_t20
